package com.cj.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


/**
 * 登录拦截器
 */
@WebFilter("/*") // Filter的拦截规则 *代表所有
public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("登录拦截器被初始化....");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        /**
         * 登录拦截web资源
         *   思路：
         *       1、通过session对象获取admin的对象
         *       2、如果该对象存在，就放行所有资源
         *       3、如果不存在，重定向到登录页 login.jsp
         *
         */
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        //1、通过session对象获取admin的对象
        Object admin = request.getSession().getAttribute("admin");

        String uri = request.getRequestURI() ;//部分路径
        //   "/employeeSystem/login.jsp"
        uri = uri.substring("/employeeSystem/".length()); // "login.jsp"

        //判断admin对象是否存在
        if(admin == null){
            /**
             * 放行部分web资源
             */

            //将要放行的资源路径 装到List对象中
            List<String> priUrl = new ArrayList<>();
            priUrl.add("login.jsp");
            priUrl.add("/js/");
            priUrl.add("/css/");
            priUrl.add("/images/");
            priUrl.add("system");
            //如果还有要放行的资源路径，继续添加

            if(priUrl.contains(uri)){
                //放行
                filterChain.doFilter(request, response);
                return;
            }
            //重定向到登录页
            response.sendRedirect("login.jsp");
        }else {
            //admin不为空的时候，不能再跳转到登录页
            if(uri.startsWith("login.jsp")){
                response.sendRedirect("employee?method=empList");
            }
            //2.如果该对象存在，就放行所有资源
            filterChain.doFilter(request, response);
        }

    }

    /**
     * 拦截器销毁方法
     */
    @Override
    public void destroy() {
        System.out.println("登录拦截器已销毁...");
    }
}
